package superBarbershop;

import java.util.PriorityQueue;

public class Caja {
    PriorityQueue<Cliente> fila;
    private boolean ocupada;
    
    public Caja() {
        ocupada = false;
        fila = new PriorityQueue<>();
    }
    
    public Cliente[] fila() {
        return fila.toArray(new Cliente[fila.size()]);
    }
    
    public void cobrar(Cliente cliente)
    {
        fila.add(cliente);
        if (!ocupada)
            ocupar(cliente);
    }
    
    private void ocupar(Cliente cliente)
    {
        ocupada = true;
        Registro.actualizar(System.currentTimeMillis(), cliente.id(), 6);
        Thread t = new Thread(new Pago(cliente.tiempoCaja()));
        t.start();
    }
    
    public void retirar()
    {
        ocupada = false;
        Registro.actualizar(System.currentTimeMillis(), fila.poll().id(), 7);
        if (!fila.isEmpty())
            ocupar(fila.peek());
    }
    
    private class Pago implements Runnable
    {
        private int tiempo;
        
        public Pago(int t)
        {
            tiempo = t;
        }
        
        @Override
        public void run()
        {
            try
            {
                Thread.sleep(tiempo * 1000);
                retirar();
            }
            catch (InterruptedException e) {}
        }
    }
}
